//           relatorio.C
//  Tue May 24 16:17:14 2011
//  Copyright  2011  Alcione Ferreira
//  <alcione.sombra@gmail.com>

#include "relatorio.h"

/**
 *
 */
COLUNASRT::COLUNASRT()
	{
	int i;/**<Variável local para contagem dos campos*/
	this->n_campos = 3;
	add(this->descricao);
	add(this->cod_servico);
	add(this->cod_funcionario);
	add(this->cod_cliente);
	for (i=0; i < this->n_campos; i++)
		{
		add(this->campo[i]);
		}
	}

/**
 *
 */
COLUNASRT::~COLUNASRT()
	{
			
	}

/**
 * /param funcionario código do usuário logado no sistema.
 * /param tipo utilizado para identificar o tipo de relatório que será gerado.\n
 * 1 - Relatório de Recibos de um determinado período do usuário logado com a possibilidade de selecionar um serviço.
 */
RELATORIO::RELATORIO(BANCOPG *conecao,int funcionario, int tipo)
	{
	string aux;
	this->entry_ativa = 0;
	this->conexao = conecao;
	this->data_relatorio[0].clear();
	this->data_relatorio[1].clear();
	this->cod_fun = funcionario;
	this->tipo_relatorio = tipo;
	aux.clear();
	aux.append(IMG_PATH);
	aux+="relatorio.ico";
	this->ponteiro_icon=Gdk::Pixbuf::create_from_file (aux);
	this->carregar_usuario();
	}

/**
 *
 */
RELATORIO::~RELATORIO()
	{
	/*if (this->conexao->conectado)
		{
		delete this->conexao;
		}*/
	}

/**
 *
 */
void RELATORIO::sair()
	{
	switch(this->tipo_relatorio)
		{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
		case 6:
		case 7:
		case 8:
		case 9:
		case 10:
		case 11:
		case 12:
		case 13:
		case 14:
			{
			this->WRelat->hide();
			break;
			}
		}
	}

/**
 *
 */
void RELATORIO::carregar_usuario()
	{
	string SQL;
	char *sql, *aux;
	vector<string> linha;

	SQL.clear();
	SQL = "select nome, u_login, acesso from cadastro.funcionario where cod_fun=";
	aux = new char[10];
	itoa(this->cod_fun, aux, 10);
	SQL.append(aux);
	delete aux;
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	this->conexao->executar(sql);
	if (this->conexao->query_result == 2)
		{
		conexao->resultado();
		linha = conexao->resultados.at(0);
		this->n_func = linha.at(0);
		this->n_login = linha.at(1);
		this->n_acesso = atoi(linha.at(2).c_str());
		}
	else if (this->conexao->query_result == 3)
		{
		cout << this->conexao->mensagem << endl;
		}
	delete sql;
	}

/**
 *
 */
void RELATORIO::janela()
	{
	string aux;
	char *aux_n;
	//Auxiliares
	Gtk::VBox *Tela;
	Gtk::VBox *VTela;
	Gtk::HBox *HTela;
	Gtk::Frame *FTela;
	Gtk::Label *Texto;
	Gtk::RadioButton::Group Deb_Cred;
	Gtk::RadioButton *Debito;
	Gtk::Button *B_Aux;
	
	this->WRelat = new Gtk::Window();
	this->WRelat->set_icon(this->ponteiro_icon);
	this->WRelat->set_type_hint(Gdk::WINDOW_TYPE_HINT_NORMAL);
	this->WRelat->set_position(Gtk::WIN_POS_CENTER);
	this->WRelat->signal_hide().connect(sigc::mem_fun(*this,&RELATORIO::sair));
	Tela = new Gtk::VBox(false,0);
	switch(this->tipo_relatorio)
		{
		case 1:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório"));
			this->WRelat->set_size_request(400,120);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,27);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,27);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Selecionar Serviço"));
			VTela = new Gtk::VBox(false,0);
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Cod_Servico = new Gtk::Entry();
			this->Cod_Servico->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Servico,1));
			this->Cod_Servico->set_size_request(50,27);
			HTela->pack_start(*this->Cod_Servico,false,false,0);
			Texto = new Gtk::Label(Glib::ustring("Descrição: "));
			HTela->pack_start(*Texto,false,false,5);
			this->Desc_Servico = new Gtk::Entry();
			this->Desc_Servico->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Desc_Servico));
			this->Servico_List = Gtk::EntryCompletion::create();
			this->Desc_Servico->set_completion(this->Servico_List);
			this->dados_serv = Gtk::ListStore::create(this->arvore_reg);
			this->Servico_List->set_model(this->dados_serv);
			this->preparar_dados (1);
			//this->Desc_Servico->set_size_request(50,28);
			HTela->pack_start(*this->Desc_Servico,true,true,5);
			VTela->pack_start(*HTela,true,true,0);
			FTela->add(*VTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Cod_Servico));
			this->Cod_Servico->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_servico),this->WRelat,this->Cod_Servico,1));
			this->Desc_Servico->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_servico),this->WRelat,this->Desc_Servico,2));
			break;
			}
		case 2:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório"));
			this->WRelat->set_size_request(400,170);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,27);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,27);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Selecionar Funcionário"));
			HTela =  new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Cod_Funcionario = new Gtk::Entry();
			this->Cod_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Funcionario,1));
			this->Cod_Funcionario->set_size_request(50,27);
			HTela->pack_start(*this->Cod_Funcionario,false,false,0);
			Texto = new Gtk::Label(Glib::ustring("Nome: "));
			HTela->pack_start(*Texto,false,false,5);
			this->Desc_Funcionario = new Gtk::Entry();
			this->Desc_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Desc_Funcionario));
			this->Funcionario_List = Gtk::EntryCompletion::create();
			this->Desc_Funcionario->set_completion(this->Funcionario_List);
			this->dados_fun = Gtk::ListStore::create(this->arvore_reg);
			this->Funcionario_List->set_model(this->dados_fun);
			this->preparar_dados (2);
			HTela->pack_start(*this->Desc_Funcionario,true,true,5);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Selecionar Serviço"));
			VTela = new Gtk::VBox(false,0);
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Cod_Servico = new Gtk::Entry();
			this->Cod_Servico->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Servico,1));
			this->Cod_Servico->set_size_request(50,27);
			HTela->pack_start(*this->Cod_Servico,false,false,0);
			Texto = new Gtk::Label(Glib::ustring("Descrição: "));
			HTela->pack_start(*Texto,false,false,5);
			this->Desc_Servico = new Gtk::Entry();
			this->Desc_Servico->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Desc_Servico));
			this->Servico_List = Gtk::EntryCompletion::create();
			this->Desc_Servico->set_completion(this->Servico_List);
			this->dados_serv = Gtk::ListStore::create(this->arvore_reg);
			this->Servico_List->set_model(this->dados_serv);
			this->preparar_dados (1);
			//this->Desc_Servico->set_size_request(50,28);
			HTela->pack_start(*this->Desc_Servico,true,true,5);
			VTela->pack_start(*HTela,true,true,0);
			FTela->add(*VTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Cod_Funcionario));
			this->Cod_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Cod_Funcionario,1));
			this->Desc_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Desc_Funcionario,2));
			this->Cod_Servico->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_servico),this->WRelat,this->Cod_Servico,1));
			this->Desc_Servico->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_servico),this->WRelat,this->Desc_Servico,2));
			break;
			}
		case 3:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório de Créditos"));
			this->WRelat->set_size_request(300,100);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,27);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,27);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			Detalhe = new Gtk::CheckButton("Detalhar");
			Detalhe->set_active(true);
			Tela->pack_start(*Detalhe,false,false,0);			
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->OK));
			break;
			}
		case 4:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório de Créditos - Clientes"));
			this->WRelat->set_size_request(320,145);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,27);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Cliente"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			B_Aux = new Gtk::Button("...");
			B_Aux->signal_clicked ().connect(sigc::mem_fun(*this,&RELATORIO::clientes_credito));
			HTela->pack_start(*B_Aux,false,false,0);
			this->Cod_Cliente = new Gtk::Entry();
			this->Cod_Cliente->set_size_request(50,-1);
			this->Cod_Cliente->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Cliente,1));
			//delete aux_n;
			HTela->pack_start(*this->Cod_Cliente,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" Nome: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Nome_Cliente = new Gtk::Entry();
			this->Nome_Cliente->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Nome_Cliente));
			this->Client_List = Gtk::EntryCompletion::create();
			this->Nome_Cliente->set_completion(this->Client_List);
			this->dados_cli = Gtk::ListStore::create(this->arvore_reg);
			this->Client_List->set_model(this->dados_cli);
			this->preparar_dados (3);
			//this->Desc_Servico->set_size_request(50,28);
			HTela->pack_start(*this->Nome_Cliente,true,true,5);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			Detalhe = new Gtk::CheckButton("Detalhar");
			Detalhe->set_active(true);
			Tela->pack_start(*Detalhe,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Cod_Cliente));
			this->Cod_Cliente->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_cliente),this->WRelat,this->Cod_Cliente,1));
			this->Nome_Cliente->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_cliente),this->WRelat,this->Nome_Cliente,2));
			break;
			}
		case 5:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório por Funcionário"));
			this->WRelat->set_size_request(400,165);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Selecionar Funcionário"));
			HTela =  new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Cod_Funcionario = new Gtk::Entry();
			this->Cod_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Funcionario,1));
			this->Cod_Funcionario->set_size_request(50,-1);
			HTela->pack_start(*this->Cod_Funcionario,false,false,0);
			Texto = new Gtk::Label(Glib::ustring("Nome: "));
			HTela->pack_start(*Texto,false,false,5);
			this->Desc_Funcionario = new Gtk::Entry();
			this->Desc_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Desc_Funcionario));
			this->Funcionario_List = Gtk::EntryCompletion::create();
			this->Desc_Funcionario->set_completion(this->Funcionario_List);
			this->dados_fun = Gtk::ListStore::create(this->arvore_reg);
			this->Funcionario_List->set_model(this->dados_fun);
			this->preparar_dados (2);
			HTela->pack_start(*this->Desc_Funcionario,true,true,5);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Débito/Crédito"));
			VTela = new Gtk::VBox(false,0);
			HTela = new Gtk::HBox(false,0);
			Debito = new Gtk::RadioButton(Glib::ustring("Débito"));
			Deb_Cred = Debito->get_group();
			this->Credito = new Gtk::RadioButton(Deb_Cred,Glib::ustring("Crédito"));
			HTela->pack_start(*this->Credito,false,false,0);
			HTela->pack_start(*Debito,false,false,0);
			VTela->pack_start(*HTela,true,true,0);
			FTela->add(*VTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Cod_Funcionario));
			this->Cod_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Cod_Funcionario,1));
			this->Desc_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Desc_Funcionario,2));
			break;
			}
		case 6:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório de Resumo de Entrada"));
			this->WRelat->set_size_request(300,75);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->OK));
			break;
			}
		case 7:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório de Resumo de Saídas"));
			this->WRelat->set_size_request(300,75);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT_PREVIEW);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->OK));
			break;
			}
		case 8:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Consulta de Recibos"));
			this->WRelat->set_size_request(300,125);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Selecionar Funcionário"));
			HTela =  new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Cod_Funcionario = new Gtk::Entry();
			this->Cod_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Funcionario,1));
			this->Cod_Funcionario->set_size_request(50,-1);
			HTela->pack_start(*this->Cod_Funcionario,false,false,0);
			Texto = new Gtk::Label(Glib::ustring("Nome: "));
			HTela->pack_start(*Texto,false,false,5);
			this->Desc_Funcionario = new Gtk::Entry();
			this->Desc_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Desc_Funcionario));
			this->Funcionario_List = Gtk::EntryCompletion::create();
			this->Desc_Funcionario->set_completion(this->Funcionario_List);
			this->dados_fun = Gtk::ListStore::create(this->arvore_reg);
			this->Funcionario_List->set_model(this->dados_fun);
			this->preparar_dados (2);
			HTela->pack_start(*this->Desc_Funcionario,true,true,5);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Cod_Funcionario));
			this->Cod_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Cod_Funcionario,1));
			this->Desc_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Desc_Funcionario,2));
			break;
			}
		case 9:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Recibo::Relatório de Débitos"));
			this->WRelat->set_size_request(300,75);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->OK));
			break;
			}
		case 10:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Serviço/Selos::Relatório por Funcionário"));
			this->WRelat->set_size_request(400,125);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Selecionar Funcionário"));
			HTela =  new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Cod_Funcionario = new Gtk::Entry();
			this->Cod_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Funcionario,1));
			this->Cod_Funcionario->set_size_request(50,-1);
			HTela->pack_start(*this->Cod_Funcionario,false,false,0);
			Texto = new Gtk::Label(Glib::ustring("Nome: "));
			HTela->pack_start(*Texto,false,false,5);
			this->Desc_Funcionario = new Gtk::Entry();
			this->Desc_Funcionario->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Desc_Funcionario));
			this->Funcionario_List = Gtk::EntryCompletion::create();
			this->Desc_Funcionario->set_completion(this->Funcionario_List);
			this->dados_fun = Gtk::ListStore::create(this->arvore_reg);
			this->Funcionario_List->set_model(this->dados_fun);
			this->preparar_dados (2);
			HTela->pack_start(*this->Desc_Funcionario,true,true,5);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			/*FTela = new Gtk::Frame (Glib::ustring("Débito/Crédito"));
			VTela = new Gtk::VBox(false,0);
			HTela = new Gtk::HBox(false,0);
			Debito = new Gtk::RadioButton(Glib::ustring("Débito"));
			Deb_Cred = Debito->get_group();
			this->Credito = new Gtk::RadioButton(Deb_Cred,Glib::ustring("Crédito"));
			HTela->pack_start(*this->Credito,false,false,0);
			HTela->pack_start(*Debito,false,false,0);
			VTela->pack_start(*HTela,true,true,0);
			FTela->add(*VTela);
			Tela->pack_start (*FTela,false,false,0);*/
			//VTela->pack_start(*HTela,true,true,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Cod_Funcionario));
			this->Cod_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Cod_Funcionario,1));
			this->Desc_Funcionario->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_funcionario),this->WRelat,this->Desc_Funcionario,2));
			break;
			}
		case 11:
		case 12:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Serviço/Selos::Relatório Geral"));
			this->WRelat->set_size_request(400,75);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->OK));
			break;
			}
		case 13:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Escrituras::Relatório Geral"));
			this->WRelat->set_size_request(400,75);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,-1);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->OK));
			break;
			}
		case 14:
			{
			aux_n = new char[this->data_relatorio[0].length()+1];
			strcpy(aux_n,this->data_relatorio[0].c_str());
			aux.clear();
			aux = data_formatada(aux_n,2);
			delete aux_n;
			this->WRelat->set_title(Glib::ustring("Relatório de SubISSQN"));
			this->WRelat->set_size_request(320,125);
			FTela = new Gtk::Frame (Glib::ustring("Período do Relatório"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("De: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_INI = new Gtk::Entry();
			this->Data_INI->set_size_request(100,-1);
			this->Data_INI->set_text(aux);
			this->Data_INI->set_max_length(10);
			this->Data_INI->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),1));
			//delete aux_n;
			HTela->pack_start(*this->Data_INI,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" à "));
			HTela->pack_start(*Texto,false,false,0);
			this->Data_FIM = new Gtk::Entry();
			this->Data_FIM->set_size_request(100,27);
			this->Data_FIM->set_text(aux);
			this->Data_FIM->set_max_length(10);
			this->Data_FIM->signal_changed().connect(sigc::bind<int>(sigc::mem_fun(*this,&RELATORIO::checagem),2));
			HTela->pack_start(*this->Data_FIM,false,false,0);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			FTela = new Gtk::Frame (Glib::ustring("Cliente"));
			HTela = new Gtk::HBox(false,0);
			Texto = new Gtk::Label(Glib::ustring("Código: "));
			HTela->pack_start(*Texto,false,false,0);
			B_Aux = new Gtk::Button("...");
			B_Aux->signal_clicked ().connect(sigc::mem_fun(*this,&RELATORIO::clientes_credito));
			HTela->pack_start(*B_Aux,false,false,0);
			this->Cod_Cliente = new Gtk::Entry();
			this->Cod_Cliente->set_size_request(50,-1);
			this->Cod_Cliente->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::digito),this->Cod_Cliente,1));
			//delete aux_n;
			HTela->pack_start(*this->Cod_Cliente,false,false,0);
			Texto = new Gtk::Label(Glib::ustring(" Nome: "));
			HTela->pack_start(*Texto,false,false,0);
			this->Nome_Cliente = new Gtk::Entry();
			this->Nome_Cliente->signal_changed().connect(sigc::bind(sigc::mem_fun(*this,&RELATORIO::letra),this->Nome_Cliente));
			this->Client_List = Gtk::EntryCompletion::create();
			this->Nome_Cliente->set_completion(this->Client_List);
			this->dados_cli = Gtk::ListStore::create(this->arvore_reg);
			this->Client_List->set_model(this->dados_cli);
			this->preparar_dados (3);
			//this->Desc_Servico->set_size_request(50,28);
			HTela->pack_start(*this->Nome_Cliente,true,true,5);
			FTela->add(*HTela);
			Tela->pack_start (*FTela,false,false,0);
			HTela = new Gtk::HBox(false,0);
			this->OK = new Gtk::Button(Gtk::Stock::PRINT);
			this->OK->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::imprimir));
			HTela->pack_start(*this->OK, false, false, 0);
			this->Cancel = new Gtk::Button(Gtk::Stock::CLOSE);
			this->Cancel->signal_clicked().connect(sigc::mem_fun(*this,&RELATORIO::sair));
			HTela->pack_start(*this->Cancel, false, false, 0);
			Tela->pack_start(*HTela,false,false,0);
			this->Data_INI->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Data_FIM));
			this->Data_FIM->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::tabular),this->WRelat,this->Cod_Cliente));
			this->Cod_Cliente->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_cliente),this->WRelat,this->Cod_Cliente,1));
			this->Nome_Cliente->signal_activate().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::checar_cliente),this->WRelat,this->Nome_Cliente,2));
			break;
			}
		}
	this->WRelat->add(*Tela);
	this->WRelat->show_all();
	Gtk::Main::run(*this->WRelat);
	}

/**
 * Checagem de máscara de Gtk::Entrys
 */
void RELATORIO::checagem(int onde)
	{
	string data_dg, mascara;
	int tam;
	bool mudou;
	mudou = false;
	if (this->entry_ativa != onde)
		{
		this->entry_ativa = onde;
		mudou = true;
		}
	switch(onde)
		{
		case 1:
			{
			if (mudou)
				{
				this->pos_entry = this->Data_INI->get_text_length();
				}
			mascara.clear();
			mascara = "##/##/####";
			data_dg.clear();
			data_dg = this->Data_INI->get_text();
			tam = data_dg.length();
			if(isdigit(data_dg[tam-1]) || (data_dg[tam-1] == '/'))
				{
				if ((this->pos_entry > 0) && (this->pos_entry > tam))
					{
					this->pos_entry--;
					data_dg[tam]='\0';
					}
				else if (tam < 10)
					{
					if(mascara[tam] !='#')
						{
						data_dg += mascara [tam];
						}
					if((data_dg[tam-1] == '/')&&(data_dg[tam-2] == '/'))
						{
						data_dg[tam-1] = '\0';
						}
					tam++;
					}
				}
			else
				{
				data_dg[tam-1]='\0';
				tam--;
				}
			this->Data_INI->set_text(data_dg);
			this->set_posicao(this->Data_INI,tam);
			this->pos_entry = tam;
			break;
			}
		case 2:
			{
			if (mudou)
				{
				this->pos_entry = this->Data_FIM->get_text_length();
				}
			mascara.clear();
			mascara = "##/##/####";
			data_dg.clear();
			data_dg = this->Data_FIM->get_text();
			tam = data_dg.length();
			if(isdigit(data_dg[tam-1]) || (data_dg[tam-1] == '/'))
				{
				if ((this->pos_entry > 0) && (this->pos_entry > tam))
					{
					this->pos_entry--;
					data_dg[tam]='\0';
					}
				else if (tam < 10)
					{
					if(mascara[tam] !='#')
						{
						data_dg += mascara [tam];
						}
					if((data_dg[tam-1] == '/')&&(data_dg[tam-2] == '/'))
						{
						data_dg[tam-1] = '\0';
						}
					tam++;
					}
				}
			else
				{
				data_dg[tam-1]='\0';
				tam--;
				}
			this->Data_FIM->set_text(data_dg);
			this->set_posicao(this->Data_FIM,tam);
			this->pos_entry = tam;
			break;
			}				
		}
	}

/**
 * \param w Gtk::Entry passada por referência.
 * \param n posição que será assumida pelo cursor.
 */
void RELATORIO::set_posicao (Gtk::Entry * w, int n)
	{
	Glib::signal_idle().connect(sigc::bind_return(sigc::bind<int>(sigc::mem_fun (*w, &Gtk::Entry::set_position), n), false));
	}

/**
 * /param w Gtk::Window onde encontra-se o Gtk::Widget para setar o foco.
 * /param d Gtk::Widget que será setado o foco.
 */
void RELATORIO::tabular(Gtk::Window *w, Gtk::Widget *d)
	{
	w->set_focus(*d);
	}

/**
 * /param dados controle de qual informação será carregada.
 */
void RELATORIO::preparar_dados (int dados)
	{
	string SQL;
	char *sql;
	int i, total;
	vector<vector<string> >::iterator ir;
	vector<string> linha;
		
	switch(dados)
		{
		case 1:
			{
			SQL.clear();
			SQL = "select cod_serv, descricao from cadastro.servicos where e_s=1 order by descricao";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str ());
			this->conexao->executar(sql);
			delete sql;
			if (this->conexao->query_result == 3)
				{
				cout << this->conexao->mensagem << endl;
				}
			else
				{
				total = this->conexao->registros;
				if (total > 0)
					{
					conexao->resultado();
					for (ir=conexao->resultados.begin(); ir < conexao->resultados.end(); ir++)
						{
						linha = *ir;
						celula = *(this->dados_serv->append());
						celula[arvore_reg.cod_servico] = atoi(linha.at(0).c_str());
						celula[arvore_reg.descricao]= linha.at(1);
						}
					}
				else
					{
					celula = *(this->dados_serv->append());
					celula[arvore_reg.cod_servico] = 0;
					celula[arvore_reg.descricao] = "Não há registros na base de dados";
					}
				}
			this->Servico_List->set_text_column(arvore_reg.descricao);
			break;
			}
		case 2:
			{
			SQL.clear();
			SQL = "select cod_fun, u_login from cadastro.funcionario order by nome";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str ());
			this->conexao->executar(sql);
			delete sql;
			if (this->conexao->query_result == 3)
				{
				cout << this->conexao->mensagem << endl;
				}
			else
				{
				total = this->conexao->registros;
				if (total > 0)
					{
					conexao->resultado();
					for (ir=conexao->resultados.begin(); ir < conexao->resultados.end(); ir++)
						{
						linha = *ir;
						celula = *(this->dados_fun->append());
						celula[arvore_reg.cod_funcionario] = atoi(linha.at(0).c_str());
						celula[arvore_reg.descricao]= linha.at(1);
						}
					}
				else
					{
					celula = *(this->dados_fun->append());
					celula[arvore_reg.cod_funcionario] = 0;
					celula[arvore_reg.descricao] = "Não há registros na base de dados";
					}
				}
			this->Funcionario_List->set_text_column(arvore_reg.descricao);
			break;
			}
		case 3:
			{
			SQL.clear();
			SQL = "select clientes.cod_cli, clientes.nome from caixa.lancamentos inner join cadastro.clientes on lancamentos.cod_cli=clientes.cod_cli where lancamentos.tipo='C' ";
			if (this->tipo_relatorio == 4)
				{
				SQL += " and clientes.credito";
				}
			SQL += " group by clientes.cod_cli,clientes.nome order by clientes.nome";
			sql = new char[SQL.length()+1];
			strcpy(sql,SQL.c_str ());
			this->conexao->executar(sql);
			delete sql;
			if (this->conexao->query_result == 3)
				{
				cout << this->conexao->mensagem << endl;
				}
			else
				{
				total = this->conexao->registros;
				if (total > 0)
					{
					conexao->resultado();
					for (ir=conexao->resultados.begin(); ir < conexao->resultados.end(); ir++)
						{
						linha = *ir;
						celula = *(this->dados_cli->append());
						celula[arvore_reg.cod_cliente] = atoi(linha.at(0).c_str());
						celula[arvore_reg.descricao]= linha.at(1);
						}
					}
				else
					{
					celula = *(this->dados_cli->append());
					celula[arvore_reg.cod_cliente] = 0;
					celula[arvore_reg.descricao] = "Não há registros na base de dados";
					}
				}
			this->Client_List->set_text_column(arvore_reg.descricao);
			break;
			}
		}
	}

/**
 * \param e Gtk::Entry passada por referência.
 */
void RELATORIO::letra(Gtk::Entry *e)
	{
	string letras;

	letras.clear();
	letras = e->get_text();
	e->set_text(Glib::ustring(ParaMaiusculos(letras)));
	}

/**
 * \param e Gtk::Entry passada por referência.
 * \param modo para fazer a vefiricação com casas decimais ou não.\n
 * 1 - para não decimal\n
 * 2 - para decimal
 */
void RELATORIO::digito(Gtk::Entry *e, int modo)
	{
	string digito;
	int len;
		
	digito.clear();
	switch(modo)
		{
		case 1:
			{
			digito = e->get_text();
			len = digito.length()-1;
			if (!isdigit(digito[len]))
				{
				digito[len] = '\0';
				}
			e->set_text(digito);
			break;
			}
		case 2:
			{
			digito = e->get_text();
			len = digito.length()-1;
			if (!isdigit(digito[len])&&(digito[len] != ','))
				{
				digito[len] = '\0';
				}
			e->set_text(digito);
			break;
			}
		}
	}

/**
 * \param w Gtk::Window que encontra-se a Gtk::Entry.
 * \param e Gtk::Entry passada por referência.
 * \param modo indica como tá sendo passado os valores da Gtk::Entry.\n
 * 1 - Passado o código
 * 2 - Passado a descrição
 */
void RELATORIO::checar_servico (Gtk::Window *w,Gtk::Entry *e, int modo)
	{
	string SQL, AUX;
	char *sql;
	bool ok;
	vector<string> linha;

	if (e->get_text_length () > 0 )
		{
		ok = true;
		AUX.clear();
		AUX = e->get_text();
		SQL.clear();
		SQL = "select cod_serv, codigo, descricao from cadastro.servicos where e_s=1 and ";
		if (modo == 1)
			{
			SQL += "codigo=" + AUX;
			}
		else if (modo == 2)
			{
			SQL += "descricao='"+AUX+"'";
			}
		sql = new char [SQL.length()+1];
		strcpy(sql,SQL.c_str());
		this->conexao->executar(sql);
		delete sql;
		if (this->conexao->query_result == 3)
			{
			ok = false;
			}
		if (ok)
			{
			conexao->resultado();
			linha = conexao->resultados.at(0);
			codigo_sersel.clear();
			codigo_sersel = linha.at(0);
			if (modo == 1)
				{
				AUX.clear();
				AUX = linha.at(2);
				this->Desc_Servico->set_text(Glib::ustring(AUX));
				}
			if (modo == 2)
				{
				AUX.clear();
				AUX = linha.at(1);
				this->Cod_Servico->set_text(Glib::ustring(AUX));
				}
			this->tabular(w,this->OK);
			}
		else
			{
			cout << this->conexao->mensagem << endl;
			}
		}
	else if (modo == 1)
		{
		this->Desc_Servico->set_text("");
		this->tabular(w,this->Desc_Servico);
		}
	else if (modo == 2)
		{
		this->tabular(w,this->OK);
		}
	}

/**
 * \param w Gtk::Window que encontra-se a Gtk::Entry.
 * \param e Gtk::Entry passada por referência.
 * \param modo indica como tá sendo passado os valores da Gtk::Entry.\n
 * 1 - Passado o código
 * 2 - Passado o nome
 */
void RELATORIO::checar_funcionario (Gtk::Window *w, Gtk::Entry *e, int modo)
	{
	string SQL, AUX;
	char *sql;
	bool ok;
	vector<string> linha;

	cout << tipo_relatorio << endl;
	if (e->get_text_length () > 0 )
		{
		ok = true;
		AUX.clear();
		AUX = e->get_text();
		SQL.clear();
		SQL = "select cod_fun, u_login from cadastro.funcionario where ";
		if (modo == 1)
			{
			SQL += "cod_fun=" + AUX;
			}
		else if (modo == 2)
			{
			SQL += "u_login='"+AUX+"'";
			}
		sql = new char [SQL.length()+1];
		strcpy(sql,SQL.c_str());
		this->conexao->executar(sql);
		delete sql;
		if (this->conexao->query_result == 3)
			{
			ok = false;
			}
		if (ok)
			{
			conexao->resultado();
			linha = conexao->resultados.at(0);
			this->codigo_funsel.clear();
			this->codigo_funsel = linha.at(0);
			if (modo == 1)
				{
				AUX.clear();
				AUX = linha.at(1);
				this->Desc_Funcionario->set_text(Glib::ustring(AUX));
				}
			if (modo == 2)
				{
				AUX.clear();
				AUX = linha.at(0);					
				this->Cod_Funcionario->set_text(Glib::ustring(AUX));
				}
			switch(this->tipo_relatorio)
				{
				default:
					{
					this->tabular(w,this->Cod_Servico);
					break;
					}
				case 5:
					{
					this->tabular(w,this->Credito);
					break;
					}
				case 8:
				case 10:
					{
					this->tabular(w,this->OK);
					break;
					}
				}
			}
		else
			{
			cout << this->conexao->mensagem << endl;
			}
		}
	else if (modo == 1)
		{
		this->Desc_Funcionario->set_text("");
		this->tabular(w,this->Desc_Funcionario);
		}
	else if (modo == 2)
		{
		switch(this->tipo_relatorio)
			{
			case 5:
				{
				this->tabular(w,this->Credito);
				break;
				}
			case 8:
			case 10:
				{
				this->tabular(w,this->OK);
				break;
				}
			default:
				{
				this->tabular(w,this->Cod_Servico);
				break;
				}
			}
		}
	}

/**
 * \param w Gtk::Window que encontra-se a Gtk::Entry.
 * \param e Gtk::Entry passada por referência.
 * \param modo indica como tá sendo passado os valores da Gtk::Entry.\n
 * 1 - Passado o código
 * 2 - Passado o nome
 */
void RELATORIO::checar_cliente (Gtk::Window *w,Gtk::Entry *e, int modo)
	{
	string SQL, AUX;
	char *sql;
	bool ok;
	vector<string> linha;

	if (e->get_text_length () > 0 )
		{
		ok = true;
		AUX.clear();
		AUX = e->get_text();
		SQL.clear();
		SQL = "select cod_cli, nome from cadastro.clientes where ";
		if (modo == 1)
			{
			SQL += "cod_cli=" + AUX;
			}
		else if (modo == 2)
			{
			SQL += "nome='"+AUX+"'";
			}
		sql = new char [SQL.length()+1];
		strcpy(sql,SQL.c_str());
		this->conexao->executar(sql);
		delete sql;
		if (this->conexao->query_result == 3)
			{
			ok = false;
			}
		if (ok)
			{
			conexao->resultado();
			linha = conexao->resultados.at(0);
			codigo_clisel.clear();
			codigo_clisel = linha.at(0);
			if (modo == 1)
				{
				AUX.clear();
				AUX = linha.at(1);
				this->Nome_Cliente->set_text(Glib::ustring(AUX));
				}
			if (modo == 2)
				{
				this->Cod_Cliente->set_text(Glib::ustring(this->codigo_clisel));
				}
			this->tabular(w,this->OK);
			}
		else
			{
			cout << this->conexao->mensagem << endl;
			}
		}
	else if (modo == 1)
		{
		this->Nome_Cliente->set_text("");
		this->tabular(w,this->Nome_Cliente);
		}
	else if (modo == 2)
		{
		this->tabular(w,this->OK);
		}
	}

/**
 *
 */
void RELATORIO::imprimir()
	{
	string AUX;
	char *aux[5];
	int args;
	PDFNEW *Gerar;
	AUX.clear();
	AUX = this->Data_INI->get_text();
	aux[0] = new char[AUX.length()+1];
	strcpy(aux[0],AUX.c_str());
	AUX.clear();
	AUX = this->Data_FIM->get_text();
	aux[1] = new char[AUX.length()+1];
	strcpy(aux[1],AUX.c_str());
	switch(this->tipo_relatorio)
		{
		case 1:
			{
			args = 3;
			AUX.clear();
			AUX = this->Cod_Servico->get_text();
			if (AUX.length() != 0)
				{
				
				aux[2] = new char[this->codigo_sersel.length()+1];
				strcpy(aux[2],this->codigo_sersel.c_str());
				//cout << aux[2] << endl;
				args = 4;
				Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2]);
				delete aux[0], aux[1], aux[2];
				}
			else
				{
				Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun);
				delete aux[0], aux[1];
				}
			break;
			}
		case 2:
			{
			args=4;
			AUX.clear();
			AUX = this->Cod_Funcionario->get_text();
			if (AUX.length() > 0)
				{
				aux[2] = new char[this->codigo_funsel.length()+1];
				strcpy(aux[2],this->codigo_funsel.c_str());
				}
			else
				{
				aux[2] = new char[2];
				strcpy(aux[2],"");
				}
			AUX.clear();
			AUX = this->Cod_Servico->get_text();
			if (AUX.length() != 0)
				{
				aux[3] = new char[this->codigo_sersel.length()+1];
				strcpy(aux[3],this->codigo_sersel.c_str());
				args = 5;
				Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2],aux[3]);
				delete aux[0], aux[1], aux[2], aux[3];
				}
			else
				{
				Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2]);
				delete aux[0], aux[1], aux[2];
				}
			break;
			}
		case 3:
		case 6:
		case 7:
		case 9:
			{
			args=3;
			if (tipo_relatorio == 3)
				{
				args=4;
				if (Detalhe->get_active())
					{
					Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,true);
					}
				else
					{
					Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,false);
					}
				}
			else
				{
				Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun);
				}
			delete aux[0], aux[1];
			break;
			}
		case 4:
		case 14:
			{
			args=3;
			if (this->codigo_clisel.length() > 0)
				{
				args = 4;
				aux[2] = new char[this->codigo_clisel.length()+1];
				strcpy(aux[2],this->codigo_clisel.c_str());
				if (tipo_relatorio == 4)
					{
					args = 5;
					if (Detalhe->get_active())
						{
					    Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2],true);
						}
					else
						{
						Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2],false);
						}
					}
				else
					{
					if (tipo_relatorio == 4)
						{
						args = 4;
						if (Detalhe->get_active())
							{
							Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2],true);
							}
						else
							{
							Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2],false);
							}
						}
					else
						{
						Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2]);
						}
					}
				delete aux[0], aux[1], aux[2];
				}
			else
				{
				Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun);
				delete aux[0], aux[1];
				}
			break;
			}
		case 5:
			{
			args=4;
			AUX.clear();
			AUX = this->Cod_Funcionario->get_text();
			if (AUX.length() > 0)
				{
				aux[2] = new char[this->codigo_funsel.length()+1];
				strcpy(aux[2],this->codigo_funsel.c_str());
				}
			else
				{
				aux[2] = new char[2];
				strcpy(aux[2],"");
				}
			aux[3] = new char[2];
			if(this->Credito->get_active() == 1)
				{
				strcpy(aux[3],"C");
				}
			else
				{
				strcpy(aux[3],"D");
				}
			args = 5;
			Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2],aux[3]);
			delete aux[0], aux[1], aux[2], aux[3];
			break;
			}
		case 8:
			{
			args=4;
			AUX.clear();
			AUX = this->Cod_Funcionario->get_text();
			if (AUX.length() > 0)
				{
				aux[2] = new char[this->codigo_funsel.length()+1];
				strcpy(aux[2],this->codigo_funsel.c_str());
				}
			else
				{
				aux[2] = new char[2];
				if (this->caixa)
					{
					strcpy(aux[2],"");
					}
				else
					{
					sprintf(aux[2],"%d",this->cod_fun);
					}
				}
			Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2]);
			delete aux[0], aux[1], aux[2];
			break;
			}
		case 10:
			{
			args=4;
			AUX.clear();
			AUX = this->Cod_Funcionario->get_text();
			if (AUX.length() > 0)
				{
				aux[2] = new char[this->codigo_funsel.length()+1];
				strcpy(aux[2],this->codigo_funsel.c_str());
				}
			else
				{
				aux[2] = new char[2];
				sprintf(aux[2],"%d",this->cod_fun);
				}
			Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun,aux[2]);
			delete aux[0], aux[1], aux[2];
			break;
			}
		case 11:
		case 12:
		case 13:
			{
			args=3;
			Gerar = new PDFNEW(this->conexao,this->tipo_relatorio,args,aux[0],aux[1],this->cod_fun);
			delete aux[0], aux[1];
			break;
			}
		}
	delete Gerar;
	}

/**
 *
 */
void RELATORIO::clientes_credito ()
	{
	int i;
	Gtk::VBox *J_Principal;
	Gtk::HBox *J_Box;
	Gtk::Label *J_Label;
	Gtk::Entry *J_Entry;

	J_Clientes = new Gtk::Window();
	J_Clientes->set_title (Glib::ustring("Lista Clientes - Crédito"));
	J_Clientes->set_icon(this->ponteiro_icon);
	J_Clientes->set_position (Gtk::WIN_POS_CENTER);
	J_Clientes->set_size_request (410,170);
	J_Principal = new Gtk::VBox(false,0);
	J_Box = new Gtk::HBox(false,0);
	J_Label = new Gtk::Label("Cliente: ");
	J_Box->pack_start (*J_Label,false,false,0);
	J_Entry = new Gtk::Entry();
	J_Entry->signal_changed().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::carregar_clientes),J_Entry));
	J_Box->pack_start (*J_Entry,false,false,0);
	J_Principal->pack_start(*J_Box,false,false,0);
	J_Box = new Gtk::HBox(false,0);
	this->CS_Cliente = new Gtk::ScrolledWindow();
	this->CS_Cliente->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
	this->CT_Cliente = new Gtk::TreeView();
	this->CS_Cliente->add(*this->CT_Cliente);
	dados_ccli = Gtk::ListStore::create(arvore_reg);
	this->CT_Cliente->set_model(dados_ccli);
	this->CT_Cliente->remove_all_columns();
	this->CT_Cliente->append_column(Glib::ustring("Código"),arvore_reg.campo[0]);
	this->CT_Cliente->append_column(Glib::ustring("Nome"),arvore_reg.campo[1]);
	for(i=0; i < 2; i++)
		{
		Gtk::TreeView::Column* coluna_temp = this->CT_Cliente->get_column(i);
		coluna_temp->set_reorderable();	
		}
	this->CT_Cliente->signal_row_activated().connect(sigc::mem_fun(*this,&RELATORIO::cli_sel));
	J_Box->pack_start(*this->CS_Cliente);
	J_Principal->pack_start(*J_Box,true,true,0);
	J_Clientes->add(*J_Principal);
	J_Clientes->signal_show ().connect (sigc::bind(sigc::mem_fun(*this,&RELATORIO::carregar_clientes),J_Entry));
	J_Clientes->show_all();
	Gtk::Main::run(*J_Clientes);
	}

/**
 * \param e Entry
 */
void RELATORIO::carregar_clientes (Gtk::Entry *e)
	{
	string AUX, SQL;
	char *sql;
	int i, total;
	vector<vector<string> >::iterator ir;
	vector<string> linha;

	AUX.clear();
	AUX = e->get_text();
	AUX = ParaMaiusculos(AUX);
	e->set_text (Glib::ustring(AUX));
	SQL.clear();
	SQL = "select clientes.cod_cli, clientes.nome, clientes.credito from cadastro.clientes inner join caixa.lancamentos on lancamentos.cod_cli=clientes.cod_cli where lancamentos.tipo='C' and clientes.nome like '"+AUX+"%'";
	if (this->tipo_relatorio == 14)
		{
		SQL += " and sub_issqn";
		}
	SQL += " group by clientes.cod_cli, clientes.nome, clientes.credito order by clientes.credito desc, clientes.nome asc";
	sql = new char[SQL.length()+1];
	strcpy(sql,SQL.c_str());
	this->conexao->executar(sql);
	delete sql;
	dados_ccli = Gtk::ListStore::create(arvore_reg);
	this->CT_Cliente->set_model(dados_ccli);
	if (this->conexao->query_result == 3)
		{
		celula =  *(dados_ccli->append());
		celula[arvore_reg.cod_cliente] = 0;
		celula[arvore_reg.campo[0]]= "Erro de SQL";
		celula[arvore_reg.campo[1]]= this->conexao->mensagem;
		}
	else
		{
		total = this->conexao->registros;
		conexao->resultado();
		for (ir=conexao->resultados.begin(); ir < conexao->resultados.end(); ir++)
			{
			linha = *ir;
			celula =  *(dados_ccli->append());
			celula[arvore_reg.cod_cliente] = atoi(linha.at(0).c_str());
			celula[arvore_reg.campo[0]]= linha.at(0);
			celula[arvore_reg.campo[1]]= linha.at(1);
			}
		}
	this->CT_Cliente->remove_all_columns();
	this->CT_Cliente->append_column(Glib::ustring("Código"),arvore_reg.campo[0]);
	this->CT_Cliente->append_column(Glib::ustring("Nome"),arvore_reg.campo[1]);
	for(i=0; i < 2; i++)
		{
		Gtk::TreeView::Column* coluna_temp = this->CT_Cliente->get_column(i);
		coluna_temp->set_reorderable();	
		}
	}

/**
 * \param path caminho do tipo Gtk::TreeModel::Path.
 * \param column coluna do tipo Gtk::TreeView::Column.
 */
void RELATORIO::cli_sel(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column)
	{
	Gtk::TreeModel::iterator contador;
	Gtk::TreeModel::Row registro;
	int i;

	contador = dados_ccli->get_iter(path);
	if(contador)
		{
		registro=*contador;
		if(registro)
			{
			this->Cod_Cliente->set_text(registro[arvore_reg.campo[0]]);
			}
		}
	this->checar_cliente(this->WRelat,this->Cod_Cliente,1);
	this->J_Clientes->hide();
	}